package verda.kvantumo.Itala_Esperanta_Vortaro;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import verda.kvantumo.Itala_Esperanta_Vortaro.R;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.Html;
import android.text.Spanned;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ProgressBar;

/**
 * @author kvantumo
 *
 */
public class Artikolo extends Activity {
	private String vorto;
	private Long pozicio;
	private Map<String,String> kodoj = new HashMap<String,String>();
	private boolean FRAZOJ = false;
	
	private int aktuala = -1;
	private List<Integer> indexes = new ArrayList<Integer>(10);
	private String sercxita;
	
	private LinearLayout ll_sercxo;
	private EditText teksto;
	private EditText sercxo;
	private Button btn_antauxa;
	private Button btn_sekva;
	private Button btn_eliras;
	
	private Spanned sp;
	private SxargxasEkzemplajnFrazojn sef;
	private String ensercxinda;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.artikolo);
        
        ll_sercxo = (LinearLayout) findViewById(R.id.linearLayout_sercxas_artikolo);
        teksto = (EditText) findViewById(R.id.editText_teksto_artikolo);
        sercxo = (EditText) findViewById(R.id.editText_searcxas_artikolo);
        btn_eliras = (Button) findViewById(R.id.button_eliras_sercxas_artikolo);
        btn_sekva = (Button) findViewById(R.id.button_sekva_sercxas_artikolo);
        btn_antauxa = (Button) findViewById(R.id.button_antauxa_sercxas_artikolo);
        
        kodoj.put("m", "<h1><font color=\"red\">%s</font></h1>");
        kodoj.put("v", "");
        kodoj.put("d", "<h1><strong><font color=\"#7373ff\">%s</font></strong></h1>");
        kodoj.put("t", "<big><font color=\"green\">%s</font></big>");
        kodoj.put("g", "<font color=\"red\">%s</font>");
        kodoj.put("i", "<font color=\"#7373ff\">%s</font>");
        kodoj.put("e", "<font color=\"green\">%s</font>");
        kodoj.put("o", "<big><font color=\"#7373ff\">%s</font></big>");
        kodoj.put("b", "<big><font color=\"red\">%s</font></big>");
        kodoj.put("s", "%s");
        kodoj.put("w", "");
        kodoj.put("h", "<h1><strong><font color=\"green\">%s</font></strong></h1>");
        kodoj.put("j", "<big><font color=\"#7373ff\">%s</font></big>");
        kodoj.put("l", "%s");
        kodoj.put("x", "%s");
        kodoj.put("f", "%s");
        kodoj.put("n", "%s");
        kodoj.put("r", "%s");
        kodoj.put("z", "<big><font color=\"#7373ff\">%s</font></big>");
        kodoj.put("p", "<big>%s</big>");
        kodoj.put("k", "<i>%s</i>");
        kodoj.put("a", "%s");
        kodoj.put("c", "%s");
        
        Bundle extras = getIntent().getExtras();
        vorto = extras.getString("vorto");
        pozicio = extras.getLong("pozicio");
        String artikolo = akirasTekston();
        teksto.setText(Html.fromHtml(artikolo));
        
        sef = new SxargxasEkzemplajnFrazojn();
        sef.execute();
        
        btn_eliras.setOnClickListener(new OnClickListener(){
			public void onClick(View v) {
	        	ll_sercxo.setVisibility(View.GONE);
	        	indexes.clear();
	        	aktuala = -1;
	        	sercxo.setText("");
	        	teksto.setCursorVisible(false);
			}
        });
        
        ensercxinda = teksto.getText().toString().toLowerCase();
        
        btn_sekva.setOnClickListener(new OnClickListener(){
			public void onClick(View v) {
				teksto.requestFocus();
				if(aktuala > -1){
					if(aktuala < indexes.size()-2){
						aktuala += 1;
						teksto.setSelection(indexes.get(aktuala), indexes.get(aktuala)+sercxita.length());
						btn_antauxa.setEnabled(true);	// aktivigas la "antauxa" butonon
					}
					else{
						int idx = ensercxinda.indexOf(sercxita, indexes.get(aktuala)+1);
						if(idx != -1){
							indexes.add(idx);
							teksto.setSelection(idx, idx+sercxita.length());
							aktuala += 1;
						}
					}
				}
				else{
					int idx = ensercxinda.indexOf(sercxita);
					if(idx != -1){
						indexes.add(idx);
						teksto.setSelection(idx, idx+sercxita.length());
						btn_antauxa.setEnabled(true);	// aktivigas la "antauxa" butonon
						aktuala += 1;
					}
				}
			}
        });
        
        btn_antauxa.setOnClickListener(new OnClickListener(){
			public void onClick(View v) {
				teksto.requestFocus();
				if(aktuala > -1){
					if(aktuala > 0){
						aktuala -= 1;
						teksto.setSelection(indexes.get(aktuala), indexes.get(aktuala)+sercxita.length());
						if(aktuala == 0) btn_antauxa.setEnabled(false);	// malaktivigas la "antauxa" butonon
					}
					//else
						//btn_antauxa.setEnabled(false);	// malaktivigas la "antauxa" butonon
				}
			}
        });
        
        sercxo.addTextChangedListener(new TextWatcher(){
			public void afterTextChanged(Editable s) {}
			public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
			public void onTextChanged(CharSequence s, int start, int before, int count) {
				indexes.clear();
				sercxita = s.toString().trim();
				aktuala = -1;
				btn_antauxa.setEnabled(false);
				if(sercxita.length() == 0){
					btn_sekva.setEnabled(false);
				}
				else
					btn_sekva.setEnabled(true);
			}
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_artikolo, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item)
    {
    	switch(item.getItemId()) {
        case R.id.item_sercxas_en_artikolo:
        	ll_sercxo.setVisibility(View.VISIBLE);
        	ll_sercxo.requestFocus();
        	btn_antauxa.setEnabled(false);
			btn_sekva.setEnabled(false);
			teksto.setCursorVisible(true);
            return true;
        case R.id.item_montras_frazojn:
        	FRAZOJ = true;
        	if(sp != null){
        		teksto.setText(sp);
        		ensercxinda = teksto.getText().toString().toLowerCase();
        	}
        	else{
        		sef.cancel(true);
        		String artikolo = akirasTekston();
        		teksto.setText(Html.fromHtml(artikolo));
        		ensercxinda = teksto.getText().toString().toLowerCase();
        	}
    	}     
        return true;
    }
    
    public String akirasTekston(){
    	String rez = "";
    	String temp = "";
    	String cod;
    	Character[] kodoj = {'w', 'm', 'v'};
    	int starto = 0;
		try
		{//Byte
			BufferedReader in = new BufferedReader(
					new InputStreamReader(
							getBaseContext().getResources().openRawResource(R.raw.eoit1_utf8), "UTF-8"));
			in.skip(pozicio);
			temp = in.readLine();
			rez += elkodigasTekston(temp);
			cod = temp.substring(0, 1);
			if(cod.equals("m"))
				starto = 1;
			temp = in.readLine();
			while(temp!= null){
				if(!temp.equals("")){
					boolean b = false;
					char c;
					for(int i=starto; i<kodoj.length; i++)
					{
						c = temp.charAt(0);
						b  = kodoj[i].equals(c);
						if(b) break;
					}
					if(starto == 1 && kodoj[0].equals(temp.charAt(0)))
						starto = 0;
					if(b) break;
					temp = temp.replace("#", "<br>");
					if((temp.charAt(0) != 'e' && temp.charAt(0) != 'i' && temp.charAt(0) != 'k') || FRAZOJ)
						rez += elkodigasTekston(temp);
				}
				temp = in.readLine();
			}
		}
		catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		catch (IOException ioe) {
	        ioe.printStackTrace();
		}
    	return rez;
    }

    public String elkodigasTekston(String s){
    	if(s.length()>0){
	    	String temp = kodoj.get(s.substring(0,1));
	    	s = String.format(temp, s.substring(2)) + " ";
    	}
    	return s;
    }
    
    private class SxargxasEkzemplajnFrazojn extends AsyncTask<String, Void, Object> {
        protected Spanned doInBackground(String... args) {
        	FRAZOJ = true;
            Log.i("MyApp", "Background thread starting");
            String artikolo = akirasTekston();
            sp = Html.fromHtml(artikolo);
            return sp;
        }

        protected void onPostExecute(Object result) {
            // Pass the result data back to the main activity
            //Artikolo.this.testo = result;
        }
   }    
    
}


